package sadmin

import (
	"encoding/json"
	"errors"
	"github.com/astaxie/beego"
	"shop/models/sadmin"
	"strings"
)

type UserController struct {
	beego.Controller
}
// @Title ServerLogin
// @Description Login，账号和密码
// @Param	body		body 	sadmin.User	true		"body for login"
// @Success 200 ok
// @router /login [post]
func (c *UserController)Login()  {
	var com sadmin.User
	json.Unmarshal(c.Ctx.Input.RequestBody,&com)
	token,err:=sadmin.Login(com.Account,com.Password)
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
	}else {
		u:=sadmin.FindUserMsg(com.Account)
		rt:=sadmin.ResponseType{
			Token:token,
			Username:u.Username,
			Account:u.Account,
			Company:u.Company,
			Role:u.Role,
		}
		c.Ctx.ResponseWriter.WriteHeader(200)
		c.Data["json"]=&rt
	}
	c.ServeJSON()
}

//@Title logon
//@Description 注册，需要输入用户名，账号，密码，公司
//@Param body body sadmin.User true "d"
//@Success 200 ok
//@router /logon [post]
func (c *UserController)Logon()  {
	var com sadmin.User
	json.Unmarshal(c.Ctx.Input.RequestBody,&com)
	_,err:=sadmin.Logon(com)
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
	}else {
		c.Ctx.ResponseWriter.WriteHeader(200)
		c.Data["json"]="ok"
	}
	c.ServeJSON()
}

//@Title AdminUseradd
//@Description 超级管理员添加用户，其中角色包括：公司管理员，公司副管理员，公司员工；管理员添加用户，其中角色包括：公司副管理员，公司员工；副管理员添加用户，其中角色包括：公司员工
//@Param body body sadmin.User true "d"
//@Success 200 ok
//@router /adminuseradd/ [post]
func (c *UserController)AdminUserAdd()  {
	//获取token
	//验证token
	account:="admin"

		var com sadmin.User
	account,err:=c.token()
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
		goto f
	}
		json.Unmarshal(c.Ctx.Input.RequestBody,&com)
		_,err=sadmin.AdminAdd(account,com)
		if err!=nil{
			c.Ctx.ResponseWriter.WriteHeader(201)
			c.Data["json"]=err.Error()
		}else {
			c.Ctx.ResponseWriter.WriteHeader(200)
			c.Data["json"]="ok"
		}
		f:
	c.ServeJSON()
}

//@Title super
//@Description 超工
//@Param pass query string true "d"
//@Success 200 ok
//@router /super/ [post]
func (c *UserController)S(pass string)  {
	//不需要token！！！！！！
	sadmin.S(pass)
	c.Ctx.ResponseWriter.WriteHeader(200)
	c.ServeJSON()
}

//@Title adminshow
//@Description 展示用户信息
//@Param name query string false "name"
//@Param role query string false "role"
//@Success 200 {object} sadmin.User
//@router /adminusershow [get]
func (c *UserController)AdminShow(name string,role string)  {
	//获取token并验证token
	//account,err:=c.token()
	var com []sadmin.User
	account,err:=c.token()
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
		goto f
	}
	//account:="admin"
		com, err= sadmin.AdminShow(account, name, role)
		if err != nil {
			c.Data["json"] = err.Error()
		} else {
			c.Ctx.ResponseWriter.WriteHeader(200)
			c.Data["json"] = com
		}
f:
	c.ServeJSON()
}

//@Title adminshowbyid
//@Description 展示单个用户信息
//@Param id query int true "id"
//@Success 200 {object} sadmin.User
//@router /adminusershowbyid/ [get]
func (c *UserController)AdminShowById(id int)  {

	com:=sadmin.AdminShowById(id)
		c.Ctx.ResponseWriter.WriteHeader(200)
		c.Data["json"]=com
	c.ServeJSON()
}

//@Title AdminUseredit
//@Description 管理员编辑用户，其中角色包括：公司管理员，公司副管理员，公司员工
//@Param body body sadmin.User true "d"
//@Success 200 ok
//@router /adminuseredit [put]
func (c *UserController)AdminEdit()  {
	var com sadmin.User
	//获取token并验证token
	account,err:=c.token()
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
		goto f
	}
	//account:="admin"
	json.Unmarshal(c.Ctx.Input.RequestBody,&com)
	err=sadmin.AdminEdit(account,com)
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
	}else {
		c.Ctx.ResponseWriter.WriteHeader(200)
		c.Data["json"]=com
	}
	f:
	c.ServeJSON()
}
// @Title delaccount
// @Description 删除账号
// @Param	id		path 	int	true		"The id of account"
// @Success 200 ok
// @router /adminuserdel/:id [delete]
func (c *UserController)AdminDel()  {
	idd,_:=c.GetInt(":id")
	//获取token并验证token
	account,err:=c.token()
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
		goto f
	}
	//account:="admin"
	err=sadmin.AdminDel(account,idd)
	if err!=nil{
		c.Ctx.ResponseWriter.WriteHeader(201)
		c.Data["json"]=err.Error()
	}else {
		c.Ctx.ResponseWriter.WriteHeader(200)
		c.Data["json"]="ok"
	}
	f:
	c.ServeJSON()
}

func (c *UserController)token()(string,error) {
	account:="string"
	token:=c.Ctx.Input.Header("Authorization")
	str:=strings.Split(token,",")
	if len(str)!=2{
		return "",errors.New("token fail")
		}
	er:=sadmin.CheckToken(str[0])
	account=str[1]
	if er!=nil{
		return "",er
	}
	return account,nil
}